/* NOTE
这里会做一次json stringify。虽然低级别的日志不会落磁盘，cpu还是花了出去的
*/
import { NativeModules } from 'react-native';

// export const tranverseAndAdjust = (
//   obj: object,
//   key?: string | number | undefined,
//   isExisted: Set<object> = new Set()
// ): void => {
//   if (!obj) {
//     return;
//   }

//   if (typeof obj !== 'object') {
//     return;
//   }

//   const v = key === undefined ? obj : Reflect.get(obj, key);

//   console.log('ToolTip', key, v);
//   if (!v) {
//     return;
//   }

//   // console.log('ToolTip', obj, key, v, Array.isArray(v), typeof v);

//   if (typeof v !== 'object') {
//     if (typeof v === 'function' && key) {
//       Reflect.set(obj, key, v.toString());
//     }
//     return;
//   } // (typeof v) is object

//   if (!Array.isArray(v)) {
//     if (key && isExisted.has(v)) {
//       Reflect.deleteProperty(obj, key);
//       // console.log(obj);
//     } else {
//       isExisted.add(v);
//     }

//     Object.keys(v).forEach((k: string): void => {
//       tranverseAndAdjust(v, k, isExisted);
//     });

//     return;
//   } // v is array

//   v.forEach((value: object, index: number, array: any[]): void => {
//     tranverseAndAdjust(array, index, isExisted);
//   });
// };

class Log {
  public static d(TAG: string, msg: string): void {
    try {
      if (NativeModules.Log) {
        NativeModules.Log.d(TAG, msg);
      } else {
        console.log(TAG, msg);
      }
    } catch (error) {
      console.error(error);
    }
  }

  public static i(TAG: string, msg: string): void {
    try {
      if (NativeModules.Log) {
        NativeModules.Log.i(TAG, msg);
      } else {
        console.info(TAG, msg);
      }
    } catch (error) {
      console.error(error);
    }
  }

  public static e(TAG: string, msg: string): void {
    try {
      if (NativeModules.Log) {
        NativeModules.Log.e(TAG, msg);
      } else {
        console.error(TAG, msg);
      }
    } catch (error) {
      console.error(error);
    }
  }

  public static w(TAG: string, msg: string): void {
    try {
      if (NativeModules.Log) {
        NativeModules.Log.w(TAG, msg);
      } else {
        console.warn(TAG, msg);
      }
    } catch (error) {
      console.error(error);
    }
  }
}
export default Log;
